package cn.knightzz.service.impl;

import cn.hutool.core.util.ObjectUtil;
import cn.knightzz.entity.SysFile;
import cn.knightzz.mapper.SysFileMapper;
import cn.knightzz.service.SysFileService;
import cn.knightzz.util.OSSUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author knightzz
 * @since 2021-05-01
 */
@Service
public class SysFileServiceImpl extends ServiceImpl<SysFileMapper, SysFile> implements SysFileService {

    private final String rootPath = "test/";
    private String endpoint = "https://test-sdk98.oss-cn-beijing.aliyuncs.com";

    @Resource
    SysFileMapper fileMapper;

    @Override
    public SysFile upload(SysFile sysFile, InputStream inputStream) {

        // 封装参数
        LocalDateTime localDate = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        // 获取当前的时间戳 作为文件名
        // 2021-05-02
        String dir = formatter.format(localDate);
        String filePath = rootPath + dir + "/" + sysFile.getFileName();
        String fileUrl = endpoint + "/" + filePath;

        sysFile.setFilePath(filePath);
        sysFile.setFileUrl(fileUrl);
        sysFile.setUploadTime(new Date());

        // 上传文件
        OSSUtils.upload(filePath, inputStream);
        // 将数据存储到 数据库
        SysFile file = fileMapper.selectById(sysFile.getId());
        if(ObjectUtil.isNull(file)){
            fileMapper.insert(sysFile);
        }
        return sysFile;
    }

    @Override
    public void deleteFile(Long fileId) {
        QueryWrapper<SysFile> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id", fileId);
        SysFile sysFile = fileMapper.selectOne(queryWrapper);
        // 从阿里云OSS云存储中删除
        OSSUtils.deleteFile(sysFile.getFilePath());
        // 从数据库中删除
        fileMapper.deleteById(fileId);
    }

    /**
     * 获取文件列表
     *
     * @param files 文件id , 以,分割
     * @return
     */
    @Override
    public HashMap<String, List<String>> getFiles(String files) {

        HashMap<String, List<String>> data = new HashMap<>();
        List<String> videos = new ArrayList<>();
        List<String> images = new ArrayList<>();

        String[] split = files.trim().split(",");
        for (String s : split) {
            if (!s.equals("")){
                SysFile sysFile = fileMapper.selectById(Long.parseLong(s));
                if(sysFile.getFileType().contains("image")){
                    images.add(sysFile.getFileUrl());
                }else{
                    videos.add(sysFile.getFileUrl());
                }
            }
        }

        data.put("videos", videos);
        data.put("images", images);
        return data;
    }

}
